#include "widget.h"
#include <QPushButton>
#include <QDebug>

/**
 * Teacher 类 老师类
 * Student 类 学生类
 * 下课后，老师会触发一个信号，饿了，学生响应信号，请客吃饭。
 * @param parent
 */

Widget::Widget(QWidget *parent)
        : QWidget(parent)
{
    // 创建一个老师对象
    this->zt = new Teacher(this);

    // 创建一个学生对象
    this->st = new Student(this);

    // 老师饿了，学生请客的连接
    // 当信号和槽函数只有一个的时候，无论函数带惨还是无参，都可以用下面的写法
    // 但当有多个时（重载）下面的写法编译器就不知道要调用哪个函数了
//    connect(zt, &Teacher::hungry, st, &Student::treat);

    // 既然参数是函数的地址，那么就可以定义一个函数指针指向函数地址
//    void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;
//    void (Student::*studentSlot)(QString) = &Student::treat;
//    connect(zt, teacherSignal, st, studentSlot);

    // 不想定义函数指针变量，就这样写，推荐写法
    connect(zt, static_cast<void (Teacher::*)(QString)>(&Teacher::hungry),
            st, static_cast<void (Student::*)(QString)>(&Student::treat));

    // 调用下课函数
    classIsOver();
}

Widget::~Widget()
{
}

void Widget::classIsOver()
{
    // 下课函数，调用后，触发老师饿了的信号
//    emit zt->hungry();
    emit zt->hungry("宫保鸡丁");
}
